package br.com.ac.fatureweb.model.billing;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import br.com.ac.fatureweb.integration.billing.VolumeVO;
import br.com.ac.fatureweb.model.Roteiro;
import br.com.ac.fatureweb.service.NgcCadastroBean;
import br.com.ac.fatureweb.utilitary.Model;

@Entity
@Table(name = "VOLUME")
@SequenceGenerator(name = "SEQ_VOLUME", sequenceName = "SEQ_VOLUME", allocationSize = 1, initialValue = 1)
public class Volume extends Model {

	/**
	 *
	 */
	private static final long serialVersionUID = -8986709872318357382L;

	@Id
	@GeneratedValue(generator = "SEQ_VOLUME", strategy = GenerationType.SEQUENCE)
	@Column(name = "SEQ")
	private Long seq;

	@Column(name = "CONSUMO_FATURADO")
	private Long consumoFaturado;

	@Column(name = "CONSUMO_MEDIDO")
	private Long consumoMedido;

	@Column(name = "COD_OCORRENCIA1")
	private Long codOcorrencia1;

	@Column(name = "COD_OCORRENCIA2")
	private Long codOcorrencia2;

	@Column(name = "CONSUMO_AGUA_MES")
	private Long consumoAguaMes;

	@Column(name = "INSCRICAO", nullable = false)
	private Long inscricao;

	@Column(name = "ID_CARGA", nullable = false)
	private Long idCarga;

	@Column(name = "COD_PRODUTO")
	private Integer codProduto;

	@Column(name = "LEITURA_ATUAL")
	private Long leituraAtual;

	@Column(name = "LEITURA_ANTERIOR")
	private Long leituraAnterior;

	@Column(name = "DIAS_CONSUMO")
	private Integer diasConsumo;

	@ManyToOne(fetch = FetchType.LAZY, optional = false)
	@JoinColumn(name = "ID_ROTEIRO", referencedColumnName = "ID")
	private Roteiro roteiro;

	@Transient
	private String dscOcorrencia1;

	@Transient
	private String dscOcorrencia2;

	public Volume() {
		super();
	}

	public Volume(Long seq, Long consumoFaturado, Long consumoMedido,
			Long codOcorrencia1, Long codOcorrencia2, Long consumoAguaMes,
			Long inscricao, Long idCarga, Integer codProduto,
			Long leituraAtual, Long leituraAnterior, Integer diasConsumo,
			Roteiro roteiro) {
		super();
		this.seq = seq;
		this.consumoFaturado = consumoFaturado;
		this.consumoMedido = consumoMedido;
		this.codOcorrencia1 = codOcorrencia1;
		this.codOcorrencia2 = codOcorrencia2;
		this.consumoAguaMes = consumoAguaMes;
		this.inscricao = inscricao;
		this.idCarga = idCarga;
		this.codProduto = codProduto;
		this.leituraAtual = leituraAtual;
		this.leituraAnterior = leituraAnterior;
		this.diasConsumo = diasConsumo;
		this.roteiro = roteiro;
	}

	/**
	 * {@link NgcCadastroBean#getVolume(Long, Long, Integer)}
	 * 
	 * @author Brunno Gonçalves (brunnogoncalves@gmail.com) 05/03/2015
	 *
	 * @param seq
	 * @param consumoFaturado
	 * @param consumoMedido
	 * @param codOcorrencia1
	 * @param codOcorrencia2
	 * @param consumoAguaMes
	 * @param inscricao
	 * @param idCarga
	 * @param codProduto
	 * @param leituraAtual
	 * @param leituraAnterior
	 * @param diasConsumo
	 * @param dscOcorrencia1
	 * @param dscOcorrencia2
	 */
	public Volume(Long seq, Long consumoFaturado, Long consumoMedido,
			Long codOcorrencia1, Long codOcorrencia2, Long consumoAguaMes,
			Long inscricao, Long idCarga, Integer codProduto,
			Long leituraAtual, Long leituraAnterior, Integer diasConsumo,
			String dscOcorrencia1, String dscOcorrencia2) {
		super();
		this.seq = seq;
		this.consumoFaturado = consumoFaturado;
		this.consumoMedido = consumoMedido;
		this.codOcorrencia1 = codOcorrencia1;
		this.codOcorrencia2 = codOcorrencia2;
		this.consumoAguaMes = consumoAguaMes;
		this.inscricao = inscricao;
		this.idCarga = idCarga;
		this.codProduto = codProduto;
		this.leituraAtual = leituraAtual;
		this.leituraAnterior = leituraAnterior;
		this.diasConsumo = diasConsumo;
		this.dscOcorrencia1 = dscOcorrencia1;
		this.dscOcorrencia2 = dscOcorrencia2;
	}

	public Volume(VolumeVO volumeVO, Long idRoteiro) {
		super();
		this.consumoFaturado = volumeVO.getConsumoFaturado();
		this.consumoMedido = volumeVO.getConsumoMedido();
		this.codOcorrencia1 = volumeVO.getCodOcorrencia1();
		this.codOcorrencia2 = volumeVO.getCodOcorrencia2();
		this.consumoAguaMes = volumeVO.getConsumoAguaMes();
		this.inscricao = volumeVO.getInscricao();
		this.idCarga = volumeVO.getIdCarga();
		this.codProduto = volumeVO.getCodProduto();
		this.leituraAtual = volumeVO.getLeituraAtual();
		this.leituraAnterior = volumeVO.getLeituraAnterior();
		this.diasConsumo = volumeVO.getDiasConsumo();
		this.roteiro = new Roteiro(idRoteiro);
	}

	/**
	 * @return the consumoFaturado
	 */
	public Long getConsumoFaturado() {
		return consumoFaturado;
	}

	/**
	 * @param consumoFaturado
	 *            the consumoFaturado to set
	 */
	public void setConsumoFaturado(Long consumoFaturado) {
		this.consumoFaturado = consumoFaturado;
	}

	/**
	 * @return the consumoMedido
	 */
	public Long getConsumoMedido() {
		return consumoMedido;
	}

	/**
	 * @param consumoMedido
	 *            the consumoMedido to set
	 */
	public void setConsumoMedido(Long consumoMedido) {
		this.consumoMedido = consumoMedido;
	}

	/**
	 * @return the codOcorrencia1
	 */
	public Long getCodOcorrencia1() {
		return codOcorrencia1;
	}

	/**
	 * @param codOcorrencia1
	 *            the codOcorrencia1 to set
	 */
	public void setCodOcorrencia1(Long codOcorrencia1) {
		this.codOcorrencia1 = codOcorrencia1;
	}

	/**
	 * @return the codOcorrencia2
	 */
	public Long getCodOcorrencia2() {
		return codOcorrencia2;
	}

	/**
	 * @param codOcorrencia2
	 *            the codOcorrencia2 to set
	 */
	public void setCodOcorrencia2(Long codOcorrencia2) {
		this.codOcorrencia2 = codOcorrencia2;
	}

	/**
	 * @return the consumoAguaMes
	 */
	public Long getConsumoAguaMes() {
		return consumoAguaMes;
	}

	/**
	 * @param consumoAguaMes
	 *            the consumoAguaMes to set
	 */
	public void setConsumoAguaMes(Long consumoAguaMes) {
		this.consumoAguaMes = consumoAguaMes;
	}

	/**
	 * @return the inscricao
	 */
	public Long getInscricao() {
		return inscricao;
	}

	/**
	 * @param inscricao
	 *            the inscricao to set
	 */
	public void setInscricao(Long inscricao) {
		this.inscricao = inscricao;
	}

	/**
	 * @return the idCarga
	 */
	public Long getIdCarga() {
		return idCarga;
	}

	/**
	 * @param idCarga
	 *            the idCarga to set
	 */
	public void setIdCarga(Long idCarga) {
		this.idCarga = idCarga;
	}

	/**
	 * @return the codProduto
	 */
	public Integer getCodProduto() {
		return codProduto;
	}

	/**
	 * @param codProduto
	 *            the codProduto to set
	 */
	public void setCodProduto(Integer codProduto) {
		this.codProduto = codProduto;
	}

	/**
	 * @return the seq
	 */
	public Long getSeq() {
		return seq;
	}

	/**
	 * @param seq
	 *            the seq to set
	 */
	public void setSeq(Long seq) {
		this.seq = seq;
	}

	/**
	 * @return the roteiro
	 */
	public Roteiro getRoteiro() {
		return roteiro;
	}

	/**
	 * @param roteiro
	 *            the roteiro to set
	 */
	public void setRoteiro(Roteiro roteiro) {
		this.roteiro = roteiro;
	}

	/**
	 * @return the leituraAtual
	 */
	public Long getLeituraAtual() {
		return leituraAtual;
	}

	/**
	 * @param leituraAtual
	 *            the leituraAtual to set
	 */
	public void setLeituraAtual(Long leituraAtual) {
		this.leituraAtual = leituraAtual;
	}

	/**
	 * @return the leituraAnterior
	 */
	public Long getLeituraAnterior() {
		return leituraAnterior;
	}

	/**
	 * @param leituraAnterior
	 *            the leituraAnterior to set
	 */
	public void setLeituraAnterior(Long leituraAnterior) {
		this.leituraAnterior = leituraAnterior;
	}

	/**
	 * @return the diasConsumo
	 */
	public Integer getDiasConsumo() {
		return diasConsumo;
	}

	/**
	 * @param diasConsumo
	 *            the diasConsumo to set
	 */
	public void setDiasConsumo(Integer diasConsumo) {
		this.diasConsumo = diasConsumo;
	}

	public String getDscOcorrencia1() {
		return dscOcorrencia1;
	}

	public void setDscOcorrencia1(String dscOcorrencia1) {
		this.dscOcorrencia1 = dscOcorrencia1;
	}

	public String getDscOcorrencia2() {
		return dscOcorrencia2;
	}

	public void setDscOcorrencia2(String dscOcorrencia2) {
		this.dscOcorrencia2 = dscOcorrencia2;
	}

}
